home *** CD-ROM | disk | FTP | other *** search
-
- -----------------------------------------------
- : :
- : Supplement To Ultra-Utilities Documentation :
- : :
- : >>>>>> Ultra-Mind <<<<<< :
- : :
- : The Intelligent Database Program Generator :
- : :
- -----------------------------------------------
-
- RELEASE 1.0, First Release, December, 1983
- Author: Wat Buchanon
-
-
-
-
- Ultra-Mind program and documentation Copyright (C), 1983, The
- FreeSoft Company, P.O. Box 27608, St. Louis, MO 63146. All Rights
- Reserved. Please see Ultra-Utilities documentation for warranty and
- duplication policy.
- Table Of Contents
- -----------------
-
- Introduction........................................UM-1
-
- Defining And Generating Your Database...............UM-2
-
- How To Use The Generated Program....................UM-8
-
- Appendix A: Format Of Ultra-Mind Disk Files.........UM-11
-
- Appendix B: Wish List...............................UM-13
-
- Appendix C: The Ultra-Utilities.....................UM-14
-
- Appendix D: Limited License For Ultra-Mind..........UM-15
- UM-1) Introduction
- ------------
-
- At FreeSoft, we do quite a lot of database work, both for ourselves
- and for clients. After writing about the seven millionth database
- manager, we came to a startling conclusion: very little was actually
- changing from program to program. We admittedly are experts when it
- comes to reinventing the wheel, but this time a thought struck us,
- "Why not write a database program generator?" (TA-DA! Sound of
- trumpets...). Well, that was several years ago, and Ultra-Mind is
- the end result. Basically what it does is allow you to set up your
- unique database needs, and then actually writes a dedicated database
- program in BASIC while you watch.
-
- What we found was that we were doing in a few minutes what used to
- take hours or days. Here's a brief outline of Ultra-Mind's
- capabilities and features:
-
- 1) This program allows you to set up a customized data entry system
- and then writes a dedicated BASIC database manager program.
-
- 2) The data entry can be divided into multiple screens, called
- "pages".
-
- 3) Several different types of input fields are supported: Numeric,
- Alphanumeric, Formatted Numeric, Calculated, Automatic Date, and
- Automatic Time. In addition, the user can specify any keys that
- are restricted from entry for each individual field (No Z's
- allowed, for instance).
-
- 4) Non-field symbols, such as titles or borders, can be placed any-
- where on the data entry screens for a truly professional
- appearance.
-
- 5) Generated program is documented with remarks for easy
- customization.
-
- 6) Sophisticated hashing algorithm nullifies BASIC's slow execution.
- Typical record access (no matter how many records in the system)
- when the key field is known is under 1/2 second.
-
- 7) Knowledge of BASIC, data-file input/output routines, or other
- special functions is not required. A small amount of BASIC
- formula format is helpful for using calculation fields.
-
- 8) All generated programs can be compiled for added speed under the
- Search and List functions.
-
- 9) Number of fields and total field characters dependent only on
- available memory (total field characters per record must be less
- than 65,536 characters not counting program size).
-
- We hope you'll enjoy this package and will choose to support The
- FreeSoft Company in our endeavor to bring you the most interesting
- software at the best price. We place this product in your hands at
- no cost in order for you to truly judge its appropriatness for your
- applications.
- UM-2) Defining And Generating Your Database
- -------------------------------------
-
- Before executing the Ultra-Mind program generator, you should insure
- that the following programs are on the diskette in your logged
- (default) disk drive:
-
- 1) Ultra-Mind program generator (U-MIND.BAS)
- 2) Ultra-Mind skeleton program (SKELETON.BAS)
- 3) BASIC programming language (BASIC.COM or BASICA.COM)
-
- From the DOS prompt, type: BASIC U-MIND
- and the program should load and execute after a few seconds. You
- will first be presented with the question:
-
- Do you wish to:
-
- 1) Define a database
- 2) Generate an already defined database
-
- You should reply by pressing the '1' key (don't press <ENTER> after
- this). The program will ask you for a filename for the resulting
- program (8 characters, first character alphabetic). DO NOT add an
- extension (a period followed by 1-3 characters) to this filename. The
- program will now ask you for the title of the program and the
- author's name (yours!). Finally, you'll be asked which disk drive
- will later be used to hold the data file. You should have a disk
- with plenty of room in this drive, as the generated program itself,
- as well as several other information files will be sent to this drive
- while Ultra-Mind is working.
-
- You are now presented with the screen layout display. This display
- is used to tell Ultra-Mind the information you wish to have displayed
- in your database program data entry screens, as well as to define the
- type of input fields.
-
- The bottom of the screen is used as a message area in both the
- program generator and in your generated program. Therefore, the top
- 23 lines of the screen are reserved for your information.
-
- First, a little background on database files. A database file
- consists of a group of individual entries called "records". A record
- might be a recipe, information on an employee, or an address book
- listing. Each record is further subdivided into groups of
- information called "fields". In an employee record, one field might
- contain the date the employee was hired, and another might have his
- zip code. One of the fields in each record is predefined as the "key
- field". This is the field that best identifies each record, and will
- be used to retrieve the record from the file. If a file contained
- records of inventory parts, you might designate the inventory number
- as the key field. In an address list, you might use the person's
- last name as a key field.
-
- Why the last name instead of the full name? Ultra-Mind works best in
- applications where you know the key field. It's easy to forget
- whether you entered a person as George Smith or W. G. Smith, so the
- last name system would work best. If you're not sure of the key
- field exactly, there is a mechanism for still finding the record, but
- it is much slower.
- UM-3)
- O.K., back to the program. At the bottom of the screen, you should
- see the message:
-
- <Key Field>, Page 1: Use arrow keys to position cursor, then press
- <H>.
-
- There are three parts to a field, it's number (the key field is
- always field number 1), the field prompt (that tells you what to
- enter), and the input field area itself. Directly above the message
- area in the center you should see a diamond character. This is
- Ultra-Mind's "cursor", and is what you will move around to point to
- different areas of the screen. Practice moving the cursor around
- with the arrow keys (or the number keys 8=up, 2=down, 6=right, and
- 4=left). Notice that if you press the Home key (or 7 key), the
- cursor jumps to the upper left hand corner of the screen. The PgUp
- (or 9) key moves the cursor to the upper right, the PgDn (or 3) moves
- to the lower right, and the End (or 1) key moves the cursor to the
- lower left corner. Select a place that will be appropriate for the
- key field and press the 'H' key. Notice that the characters "1)"
- appear where the cursor used to be. That's the field number that
- will make it easy for you to later tell the generated program which
- field you want to update or search for.
-
- At the bottom of the screen, a new message appears telling you to
- enter the field prompt you wish to use. Type in a descriptive
- message that will prompt the user to type in the correct information
- for that field (like NAME: or PART NUMBER:, for instance). You have
- up to 50 characters for the field prompt, and you can leave it blank
- should you wish. The program will again ask you to position the
- cursor and press the <H> key. Don't worry about moving the cursor
- over other characters on the screen, it's doesn't destroy what it
- moves over. Don't allow your information to overlap other fields,
- though, or you will get an error message.
-
- When you've positioned the cursor and pressed the H key, you'll see
- your field prompt appear at that location. Now, we must tell the
- computer what type of field this is. The different field types each
- ask different questions, so we'll cover them one at a time.
-
- NUMERIC
- -------
- This type of field is composed only of numeric symbols, that is 0-9,
- the plus and minus signs and the decimal point (period). Although it
- is kept as a string of characters in the disk file, it is converted
- into a number when displayed by the generated program. Only numeric
- fields can be used by calculation fields (described below).
-
- When you select this type of field, you will be asked to type in the
- length of the field. This is the number of characters that the
- largest possible number that can be entered will have. FOR ALL
- FIELDS, THE FIELD NUMBER, FIELD PROMPT, AND INPUT FIELD MUST NOT BE
- GREATER THAN 79 CHARACTERS LONG TOTAL. Because the number of fields
- is limited only by your computer's memory (and believe us, you have
- plenty of room), this really isn't a problem. Just split up extra
- long fields into smaller ones. You will then be asked to locate the
- cursor and press <H>. When you have done so, the input field appears
- as a series of small boxes. This field now looks exactly as it will
- on the data entry screen of the generated program.
- UM-4)
- There is still more information the computer needs about this field.
- It next asks if you wish to restrict input characters. If you type
- "N", any numeric character can be typed into the field. If you
- answer "Y", you will be shown a list of all numeric characters and
- asked to type an "X" under the characters you wish to restrict. Type
- a space under those you wish to allow. Those characters that you
- restrict will be dead on the keyboard during entry of this field.
-
- Now the program asks you how many lines of edit checking you wish to
- have. If you don't wish to check the field for entry errors, just
- type a 0. Otherwise, for each edit check you'll be asked to enter an
- edit string. The format for an edit string is:
-
- TESTSYMBOL VALUE
-
- Where TESTSYMBOL is either a > (greater than), < (less than), or =
- (equal to), and VALUE is a number. Edit checks should be entered in
- the negative. In otherwords the edit check:
- < 52
- will tell the operator they've made an error only if the number they
- enter into this field is less than 52.
-
- Finally, you'll be asked if you wish to use a special printing format
- when this field is later displayed. If you do, just type the format
- as you would the format string in a BASIC PRINT USING statement
- (without surrounding quotes). You should consult your BASIC manual
- on the PRINT USING statement if you're unsure of this. As an
- example, if a field contained the number 342342.345 and your special
- printing format was ###,###.## the number would be displayed as
- 342,342.34 when the record is displayed later.
-
- ALPHANUMERIC
- ------------
- This field is used for entries that are either all alphabetic or
- mixed letters, symbols, and numbers. Even if a number is entered
- into an alphanumeric field, it will be considered only a string of
- characters, and calculation fields cannot use it.
-
- This type of field needs the same type of information as numeric
- fields in the way of field position, field length, and input
- character restriction, except that it does not ask for edit checks or
- special printing formats. There is only one type of edit check for
- alphanumeric fields and that is for a null entry (<ENTER> pressed
- without entering any characters). Null entries can be allowed in any
- field except the key field.
-
- FORMATTED NUMERIC
- -----------------
- This is a special type of field that allows you to enter numbers into
- a "template". For instance, the parentheses, space, and hyphen in
- the following number (323) 343-3423 identify it as a phone number.
- Although formatted numeric fields are handy for entering numeric data
- into a template, the resulting number is treated as a string of
- characters, including the special symbols used in the template, and
- cannot be used by calculation fields. After locating the cursor
- where you wish the input template to appear and pressing H, the
- computer will ask you to enter your special format. Any special keys
- can go into the template except the backslash (\). The backslash is
- used to show where the input numbers will be located. If we wanted a
- phone number field like the one above, we would enter our format as:
- (\\\) \\\-\\\\
- UM-5)
- When it's displayed on the screen, the backslashes will be converted
- to the familiar small input boxes. Pay attention to your format, as
- its a bit easy to get confused. For example, the format:
- \\/\\/\\
- could actually be used for entry of a date. Look closely and see how
- it would displayed. (Hint: 01/14/84).
-
- CALCULATED
- ----------
- This type of field is not entered by the user at all. It is
- calculated from values in other numeric fields. It is not displayed
- at all during the data entry process, only later when the record is
- retrieved from the file and displayed. It's helpful to know BASIC's
- format for specifying formulas when using this type of field. You
- need to pay attention to what the field numbers are of the numeric
- fields to be used and the resulting calculation field. Here's an
- example. If we were working on field 5 and we specified a
- calculation field, the computer would ask us how many calculation
- lines we wished to have. For this example we'll just do something
- simple in a single calculation line. To specify numeric or
- calculation fields in a calculation line, use the symbols F# followed
- by the field number in parentheses. O.K., let's add the values in
- field 2 and field 4 and display that in our calculation field (field
- 5, remember?). Here's how our calculation line would look:
- F#(5)=F#(2)+F#(4)
- You can do all kinds of tricky things with calculation fields, and
- it's easy to get yourself in trouble with them, so practice is in
- order before using them. If you need to store temporary values in a
- variable, use the variables U1# through U100#.
-
- You can also specify a special printing format for this field, just
- as you can for numeric fields.
-
- DATE AND TIME FIELDS
- --------------------
- These field types are also done automatically, but in the data entry
- stage. It permanently stores the date or time in the field at the
- moment of data entry. It's useful for fields such as "Last Updated
- ON: 03-15-1983". Just use the U>pdate function on these fields each
- time you update a record.
-
- Each time you finish entering a field, you are presented with a list
- of choices:
-
- 1) Enter new field, 2) Start new page, 3) Enter non-field symbols, 4)
- Quit.
-
- Select "Enter new field" to continue adding fields to that page.
- Whoops! What's a page? Well, that's a special feature of Ultra-Mind
- that keeps your screens from getting cluttered. You can have as many
- display screens (called "pages") as you wish. When you select "Start
- new page" the screen layout area is erased and you continue with a
- fresh slate.
-
- The "Enter non-field symbols" option is used to "prettify" your
- screen layouts with titles, borders, etc. When you select this
- option, you will again be asked to locate the cursor where you wish
- to place the symbols. Then you will asked to enter the symbols you
- wish to place there. There are two different ways to specify the
- UM-6)
- characters:
-
- 1) Just type them in from the keyboard. (Note: your string cannot
- begin with an "@" symbol).
-
- 2) Using a special syntax. The syntax is:
- @,REPEAT,ASCIICODE,ASCIICODE,ASCIICODE...etc.
- The @ symbol in the first position tells the computer that the
- special syntax follows. The REPEAT is a numeric value that tells
- how many times to repeat the following symbols. The ASCIICODE's
- are the ASCII values of the symbols you with to display.
- Confusing? It's easier than it sounds. Let's look at a couple of
- examples:
- @,79,61
- would print a string of 79 equal signs (ASCII code 61).
- @,10,40,41
- would print the sequence () ten times for a total length of 20
- characters. It would look like this:
- ()()()()()()()()()()
- The reason for using this syntax is so you can draw vertical lines
- of characters on the screen. Try this sequence:
- @,10,42,31,29
- It should have drawn a vertical line of 10 equal signs. The
- special codes 31 and 29 are used to move the cursor down a row and
- backspace one character after each equal sign is printed. The
- special control codes are:
- 28 - Move right one character
- 29 - Move left one character
- 30 - Move up one row
- 31 - Move down one row
- Please note that because of Microsoft BASIC peculiarities, you
- won't be able to print a vertical line of more than 13 characters
- at one time (all sorts of strange things happen). To get around
- this anomaly, just print a string of 13 vertical characters and
- then print a string of 10 more just beneath it for a line that
- will stretch from top to bottom of the screen. Experimentation is
- in order to get the most out of this feature.
-
- If you're like us and don't happen to like digging through the BASIC
- manual for the chart of ASCII codes, you might appreciate this
- feature: When asked to enter the symbols, just type the @ symbol
- alone. You will now enter the <Help> mode. To find out a
- character's ASCII code, just type it on the keyboard. Nifty, eh?
-
- One last caveat, the non-field symbols are not checked very closely
- for overlapping other screen info, so caution is the word. Wrap
- around is allowed on the horizontal only.
-
- When you're all done entering your screen displays, the fun part
- starts. Just enter the selection "Quit" and the program will ask
- you if you wish to go ahead and generate the database. If you don't,
- you can always generate it later by selecting the "Generate an
- already defined database" function when first executing this program.
-
- As the program is being written, just sit back and appreciate the
- number of hours it would have taken you to do this by hand. All in
- all, program generation should take only a few minutes.
- UM-7)
- During the definition and generation process, a number of important
- files are created. The extensions of the programs tell what their
- purpose are. Let's assume your program is called TEST. The files
- TEST.ATR and TEST.HDR contain information that is used to generate
- the program. These are both explained in Appendix A. It's not
- necessary to keep these files on your program disk once the program
- is generated. In the generation process, two more files are created:
- TEST.BAS is your database program, and TEST.BAT is a DOS batch file
- used to execute the program. YOU SHOULD ALWAYS USE THE BATCH FILE TO
- START YOUR PROGRAM since it sets important record size pointers. If
- you choose to compile the program, you can discard the batch file.
- Otherwise, to execute your database program, you should exit to DOS,
- make sure a copy of BASIC is on your program diskette, and type the
- word TEST at a DOS prompt.
-
- The first time this program is loaded will be very time consuming.
- If you used the DOS TYPE command to look at the program, you would
- see that it is in ASCII format with line numbers out of sequence.
- It's a good idea once the program is loaded to break out by pressing
- the BREAK key while holding down the CTRL key, and save the program
- in compressed format using the BASIC command SAVE "TEST.BAS". The
- program can be restarted then by entering the command RUN.
-
- TIPS FOR MAKING DEFINITION A PLEASANT EXPERIENCE
- ------------------------------------------------
- 1) Always have a couple of disks with plenty of room and copies of
- BASIC on them on hand just in case.
-
- 2) There's no way to go back if you make an error during definition,
- so move slowly and have some sense of direction. Freestyle coding
- can be fast, but you're better off at least having a rough sketch
- of what you'd like to end up with before starting. This goes
- double if you intend to use edit lines, special printing formats,
- or calculation fields.
-
- 3) Since the method used to make copies of screen information on the
- printer is by pressing the PrtSc key while holding down the SHIFT
- key, you'll want to be careful about using non-printable
- characters for non-field symbols or in field prompts. They can
- cause some printers to do all sorts of wild things.
- UM-8) How To Use The Generated Program
- --------------------------------
- Once the program is loaded as above described, you can remove the
- program diskette. After a brief title display, you'll be instructed
- to mount your data disk in the drive specified during the generation
- process, and press the "C" key. All data disks used by Ultra-Mind
- programs must be first initialized with special information. When
- you press the "C" key, the program will look for and load in this
- information if it exists. Otherwise, it will automatically begin
- the initialization process. You will be asked if the data file
- should use all available disk space, or if you'd like to specify the
- maximum number of records on that diskette. After getting your
- choice, initialization will begin. Depending on the number of
- records that must be initialized, this can take a few minutes or so.
-
- When choosing the size of your data file, keep this in mind: this
- program will work most efficiently when there is lots of room on the
- disk. Even though you know your particular program will never have
- more than 200 records, go ahead and use all available space. The
- "Specify number of records" option is mainly included for testing
- purposes. Diskettes are cheap, your time isn't.
-
- You'll also be asked to give the data diskette a "volume label".
- Just type in a word or two (Like Disk #1), and record this on the
- diskette's label. It just identifies the diskette to the system.
- The volume label really serves no function in this program. However,
- we envisioned it for our report generator program (forthcoming) so
- that you could extend your data file over several diskettes, yet have
- them all act as one big file for reports. If you already know that
- your file will be too big to put on one data diskette, you might use
- this to divide your file (two disks, labeled A-L and M-Z might be an
- example for a name list file).
-
- Once this data diskette is loaded into the program, it is important
- that you DO NOT REMOVE THE DATA DISKETTE before doing either of two
- things:
-
- 1) Choose the "X-tend Work To New Data Diskette" function.
- 2) Choose the "Quit and return to BASIC" function.
-
- Removing or swapping diskettes without doing either of these will at
- best confuse the program into not knowing where the hell your data
- is and at worst absolutely destroying your data files (ouch).
-
- Data disk in place, initialized, and special information loaded?
- Good, now you're in the MAIN MENU area of your program. In the
- middle of the screen are your current list of choices, which we'll
- cover in a moment, and at the top is some important information about
- your data diskette and the current status of the program.
- UM-8)
- The top of the screen lists the number of initialized records as well
- as the number of records you have already entered. It also displays
- the volume label name of the current data diskette. At the top left
- of the screen is a message marked "Current Record". This is used for
- two things, first to let you know that a record has been retrieved
- using the "Get A Record" function before updating or deleting it, or
- to allow you to continue a "Search For And List Records" function
- from a certain point after aborting a search. If no record has been
- recently retrieved with the "Get A Record" function, the current
- record will be NONE. Otherwise, it will be a number between 1 and
- the number of records initialized on that data diskette.
-
- Let's go through the commands on the main menu screen:
-
- GET A RECORD
- ------------
- This simply retrieves an entered record and displays it on the
- screen. It will prompt you for the key field of your desired record
- and then will search for it. Remember to use the correct case to
- enter the key field, as this program views lowercase and uppercase
- letters differently. JOE SMITH and joe smith and Joe Smith are each
- considered different records. When the record is displayed, you'll
- be asked "Is This It (Y/N)?" This allows you to find the correct
- record when two or more records have identical key fields. If you
- just can't find a record that you know should be in there, use the
- "Search For And List Records" to scan through the data file and note
- the correct key field.
-
- When the correct record is displayed, you'll see a short menu at the
- bottom of the screen. The Update, Delete, and Add functions are
- described below. The Menu function takes you back to the main menu
- page, and the Switch Page function let's you look at the various
- pages of the record, if there are more than one.
-
- SEARCH FOR AND LIST RECORDS
- ---------------------------
- This function is used to list all active (and deleted if you wish)
- records in the data file, or to select records on the contents of one
- of the fields.
-
- You will first be asked to enter the record # to start the search or
- press <ENTER> to start at current record. If you had just completed
- a partial search and want to continue from the point you left off,
- just press the <ENTER> key. Otherwise, enter the record number you
- wish to start the listing with (the first record in a datafile is
- record #1). If you press <ENTER> and there is no current record in
- memory, the search will begin at record #1. Except for this
- function, we don't make much use of record numbers with this system.
-
- Next, you will be asked whether you wish to display records that have
- been deleted. Records in a data file exist in one of three states:
- Active (meaning it contains a valid record), Deleted (meaning it
- contains a record marked as deleted), and Empty (meaning it has not
- yet ever contained a record). Accidentally deleted records can be
- restored to active status by using this function unless they have
- been overwritten by recently added records.
-
- The next prompt is whether you wish to select records for display by
- the contents of one it's fields. If you don't, you will see every
- record on file.
- UM-9)
- If you do, you'll be asked which field you wish to test. Then,
- you'll be asked to enter a test string. The three types of tests
- that can be made on a field are:
-
- >STRING (field contains "STRING" somewhere in it)
- <STRING (field begins with "STRING")
- =STRING (field contains "STRING" exactly and only)
-
- Once again, lowercase is considered different than uppercase. For
- our purposes here at FreeSoft, we don't use lowercase at all for
- field information and it makes life much easier.
-
- If a match is found, you have the choice of either continuing the
- search or aborting it. If you abort, operation continues just as if
- the record were retrieved with the "Get A Record" function.
-
- ADD A RECORD
- ------------
- This function is used to add records to the data file. It is pretty
- much a straight ahead entry procedure. After all fields have been
- entered, you can proofread the current page and either abort the add
- or go ahead and save the record on disk.
-
- DELETE CURRENT RECORD
- ---------------------
- This function is used to mark records as "deleted" status. Deleted
- records cannot be retrieved by a "Get A Record" function and can only
- be viewed by the "Search For And List Records" function. Deleted
- records can be overwritten by newly added records as the space is
- needed.
-
- UPDATE CURRENT RECORD
- ---------------------
- Any of a field's records, including the key field, can be modified
- using this function. Like the "Delete Current Record" function, the
- record must first be retrieved using the "Get A Record Function".
- You may wish to review the record and note the field numbers you
- want to modify before selecting the "Update Current Record"
- function, because the prior contents of a field are erased as soon
- as you specify that you wish to modify that field.
-
- X-TEND WORK TO NEW DATA DISKETTE
- --------------------------------
- This function is used to close the data file on one data diskette and
- load the special information from a new one. The new disk must be
- already initialized or initialization procedures will begin
- automatically. NEVER SWAP DATA DISKETTES WITHOUT SELECTING THIS
- FUNCTION FIRST!
-
- INITIALIZE NEW DATA DISKETTE
- ----------------------------
- This is used to perform the initialization procedures on a data
- diskette so that it can be used to hold your data file. THIS DOES
- NOT LOAD IN THE SPECIAL INFORMATION! Always verify that the volume
- label specified in the MAIN MENU display corresponds the data
- diskette mounted in the drive before attempting to do any work with
- it!
- UM-10)
- QUIT AND RETURN TO BASIC
- ------------------------
- This is the only approved way of ending the program. Ending the
- program by any other means could possibly lead to a destroyed data
- file!
-
- Well, that about does it. Chances are good that you'll find many
- more undocumented features (hopefully not bugs), that we'll need to
- include in the next revision of this manual. We always appreciate
- your comments and suggestions. Keep those cards and letters coming
- (we always wanted to say that).
-
- UM-11) APPENDIX A: FORMAT OF THE ULTRA-MIND DISK FILES
- -----------------------------------------------
-
- Chances are, you're going to want to do some rather exciting and
- unusual things with this package. To aid you in your endeaver,
- here's a description of the data files used by these programs.
-
- In the following examples, we use the filespec TEST for the program
- name.
-
- TEST.HDR
- --------
- NF - Number of defined fields
- ND - Number of defined display pages
- TB - Total number of field characters - 1 (one byte variable
- STAT$ is added to beginning of each record to hold
- record status: A=Active, D=Deleted, E=Empty
-
- TEST.ATR
- --------
- AU$ - Author's name
- NA$ - Program's filespec (including drive but without extension)
- TI$ - Program title
- For each field defined by NF in TEST.HDR:
- PG - Page number
- MR - Field prompt row
- MC - Field prompt column
- M$ - Field prompt string
- TY - Field type (1=Numeric, 2=Alphanumeric, 3=Formatted numeric,
- 4=Calculation, 5=Date, 6=Time, 7=Non-field symbols)
-
- If TY=1
- -------
- FR - Field row
- FC - Field column
- FL - Field length
- AI$ - String of acceptable input characters
- EL - Number of edit lines
- For each EL: EL$ - Edit line
- SP$ - Special printing format (Y or N)
- If SP$="Y": SF$ - special printing format string
-
- If TY=2
- -------
- FR - Field row
- FC - Field column
- FL - Field length
- AI$ - String of acceptable input characters
- If not key field: AI$ - Null entry valid (Y or N)
-
- If TY=3
- -------
- FR - Field row
- FC - Field column
- FL - Field length
- AF$ - Input format string
- AI$ - String of acceptable input characters
- UM-12)
- If TY=4
- -------
- FR - Field row
- FC - Field column
- CL - Number of calculation lines
- For each CL: CL$ - Calculation line string
- SP$ - Special printing format (Y or N)
- If SP$="Y": SF$ - Special printing format string
-
- If TY=5 or TY=6
- ---------------
- FR - Field row
- FC - Field column
- FL - Field length
-
- If TY=7
- -------
- No further variables
-
- TEST.VOL
- ---------
- V$ - Volume label string of data diskette
-
- TEST.DEF
- --------
- MAXSIZE - Number of initialized records on data diskette
- GOOD - Number of entered records on data diskette
-
- TEST.DAT
- --------
- The data file is a variable length random file than varies with the
- number of fields, length of fields, etc. Study the blocking and un-
- blocking procedures in your generated program to see the format of
- your data file.
-
- HASHING ALGORYTHM EXPLAINED
- ---------------------------
- This package uses a hashing routing for placing and retrieveing data
- records. Basically, what happens is that your key field is converted
- to a number between 1 and the number of initialized records on your
- data diskette. This becomes the record number for the record. If a
- record is already in that location, the file is scanned sequentially
- from that record until an empty or deleted record space is found.
- The hashing algorythm we're using was developed and placed in the
- public domain by Bruce L. Tonkin and we're indebted to him for its
- usefulness.
- To be effective, the hashing algorythm must be reasonably "random"
- to insure that records will spread out through the available space
- instead of clumping together. This is what gives this package such
- excellent retrieval speed under typical circumstances.
- UM-13) APPENDIX B: WISH LIST
- ----(²KKKKKKKKKKKKKKKCà For many purposes, this package will be sufficient "off the
- shelf". However, we encourage you all to do what you do best: take a
- skeleton package and refine it to something really phenomenal.
- Here's our wish list for Ultra-Mind:
-
- 1) Better documentation: O.K., we admit that this isn't the best in
- the world, but it's all in there if you look close enough. This
- manual definitely needs a re-write. We'll take responsibility for
- this and offer the fact that we wanted to get the darned thing out
- as our only excuse.
-
- 2) Sample definition (.HDR & .ATR) files: This is the best way for
- folks to learn how to get the fanciest use out this package. If
- you develope a snazzy file for keeping track of your video tape
- collection or christmas card list, why not share it with all of
- us. The definition files are rather small, so it's not necessary
- to distribute the package in generated form. We'll give this
- responsibility to y'all.
-
- 3) Report generator program: We're working on this one and it should
- be ready in the first quarter of 1984.
-
- 4) Better UPDATE function: We sorely need an update function that
- uses the INS and DEL keys like an editor instead of wiping out the
- field to be replaced. Any of you hot shots care to take this on?
-
- 5) Better lineprinter support: A small assembly language program that
- would print the screen and turn all non-printable characters into
- periods would be great. BASIC routines are just too slow. We
- give this one to you also.
-
- 6) Definition file editor: Let's make it easy to take a definition
- file and either edit, delete, or add field information. This
- would be great for "cloning" one data file's information into
- a new one, not to mention making it less frustrating when you
- make a mistake near the end of a lengthy definition session. Any
- takers?
-
- 7) A natural evolution would allow you to define how your title
- and main menu pages will look.
-
- As you can see, we've got all kinds of suggestions for making this
- product better. After all, if we'd taken the time to do everything
- to Ultra-Mind that we wanted, you probably would never get it in your
- hands. Sooner or later, you just have to take the darn thing and say
- "sink or swim, booger".
-
- One thing we do ask is that you not distribute the program in
- modified form. Instead, offer your corrections or improvements as
- merge files. That way, we can continue to support this package with
- updates and corrections from our end. Otherwise, we just won't be
- able to keep track of all of the modifications floating around. Be
- sure to send us any of your improvements or suggestions, though.
- They just might find a permanent home in Ultra-Mind.
- UM-14) APPENDIX C: THE ULTRA-UTILITIES
- -------------------------------
-
- The FreeSoft Company produces only user supported software. If you
- find the software to be useful, we have a registration program so you
- can support us. As long as we keep getting the great support
- we've enjoyed so far, we'll continue to add packages to our one and
- only product: The Ultra-Utilities. Our registration and duplication
- policies are in the Library #1 documentation. Do not distribute this
- program until you have obtained, read, and understand these policies!
-
- If you don't have the complete 5-volume Ultra-Utility set, you don't
- know what you're missing. To get the entire set, read and follow the
- below carefully:
-
- 1) We now offer two libraries of the Ultra-Utilities. FOR EACH
- LIBRARY that you want, send us one double sided, or two single
- sided diskettes formatted 8 sectors per track. Do not send
- diskettes formatted 9 sectors per track or we'll just waste our
- time reformatting them.
-
- 2) Send them to us along with a POSTAGE PAID, SELF-ADDRESSED RETURN
- MAILER. A couple of stiff pieces of cardboard is suggested for
- envelope mailers. We will not try to protect your diskettes from
- damage any better than you do. Also, please make sure that you've
- got the correct amount of postage. We hate to bitch, but we
- sometimes get up to 5 requests per day that arrive postage due.
-
- 3) Send this conglomeration to: The FreeSoft Company, P.O. Box 27608,
- St. Louis, MO 63146. Drop a note in the envelope telling us
- which library you want and where you heard about us. If you don't
- send enough disks for both libraries, we'll assume you want only
- Library #1.
-
- The Ultra-Utilities Includes:
- LIBRARY#1
- ---------
- ULTRA-ZAP: disk repair/modification utility with functions for
- display/modify disk sectors, display/modify file sectors, copy disk
- sectors, fill disk sectors, search for byte sequences (ASCII or
- numeric) in disk sectors, search for byte sequences in file sectors,
- interrogate disk format and protection schemes, modify BIOS disk
- parameter table.
-
- ULTRA-FORMAT: functions for formatting single standard tracks,
- re-format a "flaky" track without erasing old data, and format a
- non-standard (copy protected) track.
-
- ULTRA-FILE: functions for display file's directory information,
- assign or remove hidden status, assign or remove system status,
- display list of sectors allocated to a file, build a disk file from
- scratch, restore accidentally erased files, produce a unique roadmap
- of a diskette, and selectively kill files from a menu.
- UM-14)
- LIBRARY #2
- ----------
- ULTRA-OPTIMIZE: takes a standard BASIC program saved in ASCII format
- and optimizes it so that the /N switch can be used with the BASIC
- compiler to produce smaller and more efficient object code.
-
- ULTRA-MIND: intelligent database generator program that allows you to
- define a database with six different field types, full input control,
- and multiple full screens, and generates a unique BASIC program that
- offers record access in typical applications in less than 1/2 second
- (no matter how many records in the file).
-
- Coming soon to LIBRARY #2: Ultra-Report: report program generator for
- databases created with Ultra-Mind.
- All of the Ultra-Utilties work with PC-DOS versions 1.10, 2.00 and
- 2.10
- UM-15) APPENDIX D: LIMITED LICENSE FOR ULTRA-MIND
- ------------------------------------------
-
- U-MIND.BAS and SKELETON.BAS are copyrighted programs and are owned
- soley by The FreeSoft Company. You are free to use and distribute
- these and all other Ultra-Utility programs under the policies set
- forth in the LIBRARY #1 documentation manual. By using this
- software, you agree not to distribute or duplicate any Ultra-Utility
- program until you have obtained, read, and understand all duplication
- and registration policies listed in that manual.
-
- You agree not to distribute any Ultra-Utility program in modified
- form and you agree not remove any information concerning The FreeSoft
- Company, it's products or copyrights from the programs or
- documentation.
-
- The FreeSoft Company gives sole ownership to you for all programs
- generated by Ultra-Mind. You agree not to copyright such programs as
- not to interfere with our existing copyrights. Otherwise, you are
- free to compile, modify, sell, or destroy any programs generated by
- Ultra-Mind. No royalties are due The FreeSoft Company under any
- circumstance for the sale of programs generated by Ultra-Mind.
-
- If you have a problem with the above policies, we'll be willing to
- consider a special license for registered users only.